#include <unistd.h>
#include <stdio.h>
#include <string.h>

/*
    通过无名管道使父进程先运行,子进程后运行
    测试命令: ./3.out
    结果: 第一次读管道成功,接着阻塞
*/
int main(int argc, char *argv[])
{
    int pipefd[2];
    int pipe_res;
    char pipe_value;

    /*创建无名管道*/
    pipe_res = pipe(pipefd);
    if(pipe_res == 0)
        printf("pipefd[0] = %d, pipefd[1] = %d\n",pipefd[0],pipefd[1]);
    else{
        printf("创建无名管道失败!\n");
        return -1;
    }

    /*创建进程*/
    pid_t pid_f;
    pid_f = fork();
    if(pid_f > 0)
    {
        while(1)
        {
            printf("我是父进程,睡眠2秒\n");
            sleep(2);
            printf("我是父进程\n");
            printf("我是父进程\n");
            printf("我是父进程\n");
            /*写无名管道*/
            pipe_res = 1;
            write(pipefd[1], &pipe_res, 1);
            sleep(1);
        }
    }else{
        while(1)
        {
            /*读无名管道*/
            read(pipefd[0], &pipe_res, 1);
            if(pipe_res == 1){
                printf("我是子进程\n");
                printf("我是子进程\n");
                printf("我是子进程\n");
                usleep(100000);
            }
        }
    }

    close(pipefd[0]);
    close(pipefd[1]);

    return 0;
}
